package com.shujia.day13.bao4;

import java.util.ArrayList;
import java.util.Collection;

/*
    泛型通配符
        <?>
    任意类型，如果没有明确，那么就是Object以及任意的Java类了
        ? extends E
    向下限定，E及其子类
        ? super E
    向上限定，E及其父类

 */
class Demo5{
    public void show1(Collection<?> c1){ // 表示可以传入一个Collection集合，元素的类型是任意引用数据类型
        System.out.println("任意类型泛型通配符");
    }

    // 表示可以传入一个Collection集合，元素的类型是Animal或Animal子类的类型
    public void show2(Collection<? extends Animal> c1){
        System.out.println("? extends Animal类型泛型通配符");
    }

    // 表示可以传入一个Collection集合，元素的类型是Dog或Dog父类的类型
    public void show3(Collection<? super Dog> c1){
        System.out.println("任意类型泛型通配符");
    }
}

public class Demo4 {
    public static void main(String[] args) {
        Demo5 demo5 = new Demo5();

        ArrayList<Object> list1 = new ArrayList<>();
        ArrayList<Animal> list2 = new ArrayList<>();
        ArrayList<Dog> list3 = new ArrayList<>();
        ArrayList<Cat> list4 = new ArrayList<>();


//        demo5.show1(list1);
//        demo5.show1(list2);
//        demo5.show1(list3);
//        demo5.show1(list4);

//        demo5.show2(list1); // 不行
//        demo5.show2(list2);
//        demo5.show2(list3);
//        demo5.show2(list4);

//        demo5.show3(list1);
//        demo5.show3(list2);
//        demo5.show3(list3);
//        demo5.show3(list4); // 不行


    }
}
